// 导入数据库操作模块
const db = require('../config/database')
// 导入 SQL 查询语句
const userQueries = require('../config/userQueries')

// 获取文章分类数据处理函数
exports.getArticleCates = (req, res) => {
  db.query(userQueries.SELECT_ARTICLE_CATEGORIES, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // 执行成功
    res.send({
      code: 200,
      msg: '获取文章分类列表成功！',
      data: result
    })
  })
}

// 新增文章分类处理函数
exports.addArticleCates = (req, res) => {
  const QName = req.body.name
  const QAlias = req.body.alias
  db.query(userQueries.SELECT_CATEGORY_BY_NAME_OR_ALIAS, [QName, QAlias], (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // 判断 分类名称 和 分类别名 是否已存在
    if (result.length === 2) return res.cc('分类名称与分类别名已存在！')
    if (result.length === 1 && result[0].name === QName && result[0].alias === QAlias) return res.cc('分类名称与分类别名已存在！')
    // 判断 分类名称 是否已存在
    if (result.length === 1 && result[0].name === QName) return res.cc('分类名称已存在！')
    // 判断 分类别名 是否已存在
    if (result.length === 1 && result[0].alias === QAlias) return res.cc('分类别名已存在！')
    // 新增文章分类
    db.query(userQueries.INSERT_ARTICLE_CATEGORY, req.body, (err, result) => {
      // SQL 语句执行失败
      if (err) return res.cc(err, 500)
      // SQL 语句执行成功，但影响行数不为 1
      if (result.affectedRows !== 1) return res.cc('新增文章分类失败', 501)
      return res.cc('新增文章分类成功', 200)
    })
  })
}

// 删除文章处理函数
exports.deleteCateById = (req, res) => {
  db.query(userQueries.DELETE_ARTICLE_CATEGORY_BY_ID, req.params.id, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但影响行数不为 1
    if (result.affectedRows !== 1) return res.cc('操作失败', 501)
    // 操作成功
    return res.cc('操作成功', 200)
  })
}

// 根据id获取文章分类
exports.getArticleById = (req, res) => {
  db.query(userQueries.SELECT_ARTICLE_CATEGORY_BY_ID, req.params.id, (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // SQL 语句执行成功，但影响行数不为 1
    if (result.length !== 1) return res.cc('获取文章分类数据失败')
    // 操作成功
    res.send({
      code: 200,
      msg: '获取文章分类成功',
      data: result[0]
    })
  })
}

// 更新文章分类的处理函数
exports.updateCateById = (req, res) => {
  const QId = req.body.Id
  const QAlias = req.body.alias
  const QName = req.body.name
  db.query(userQueries.SELECT_CATEGORY_BY_NAME_OR_ALIAS_EXCLUDING_ID, [QId, QName, QAlias], (err, result) => {
    // SQL 语句执行失败
    if (err) return res.cc(err, 500)
    // 分类名称 和 分类别名 已存在
    if (result.length === 2) return res.cc('分类名称和分类别名已存在')
    if (result.length === 1 && result[0].name === QName && result[0].alias === QAlias) return res.cc('分类名称和分类别名已存在')
    // 分类名称已存在
    if (result.length === 1 && result[0].name === QName) return res.cc('分类名称已存在')
    // 分类别名已存在
    if (result.length === 1 && result[0].alias === QAlias) return res.cc('分类别名已存在')
    // 更新文章
    db.query(userQueries.UPDATE_ARTICLE_CATEGORY_BY_ID, [req.body, QId], (err, result) => {
      // SQL 语句执行失败 
      if (err) return res.cc(err, 500)
      // SQL 语句执行成功，但影响行数不为 1
      if (result.affectedRows !== 1) return res.cc('更新文章分类失败', 501)
      // 操作成功
      res.cc('操作成功', 200)
    })
  })
}